//配置路由的地方
import Vue from 'vue';
import VueRouter from 'vue-router';
import routes from './routes'
//使用插件
Vue.use(VueRouter);
//引入store
import store from '@/store'


//配置路由
let router= new VueRouter({
    //配置路由
    routes,//直接用上面引进来的routes数组，es6语法 k v一致
    //滚动行为 vue的进阶语法  直接查文档   路由跳转后滚动条的位置
    scrollBehavior (to, from, savedPosition) {
        //y=0代表滚动条在最上方
        
        return {  y: 0 }
      },
  
})    
//全局守卫：前置守卫（在路由跳转之间进行判断）
router.beforeEach(async (to, from, next) => {
  //to:获取到要跳转到的路由信息
  //from：获取到从哪个路由跳转过来来的信息
  //next: next() 放行  next(path) 放行  
  //方便测试 统一放行
  //next()
   //用户登录了才会有token，未登录一定不会有token
   let token=store.state.user.token
   //用户信息
   let name=store.state.user.userInfo.name
   
   //用户已经登录了
   if(token){
     //用户已经登录了就不能去Login
     if(to.path=='/login'){
       next('/home')
       
     }else{
       //登录了但是不是去login
      //如果用户名已有
      if(name){
        next()
      }else{
        //没有用户信息，派发action让仓库存储用户信息再跳转
        //获取用户信息在首页展示
        try{
          //获取用户信息成功
          await store.dispatch('getUserInfo');
          next()
        }catch(error){
           //token失效了，获取不到用户信息，重新登录
           //清楚token
          await store.dispatch('userLogout')
          next('/login')
        }
      }
     }
   }else{
    //未登录：不能去交易相关、不能去支付相关【pay|paysuccess】、不能去个人中心
    //未登录去上面这些路由-----登录
    let toPath = to.path;
    if(toPath.indexOf('/trade')!=-1 || toPath.indexOf('/pay')!=-1||toPath.indexOf('/center')!=-1){
      //把未登录的时候向去而没有去成的信息，存储于地址栏中【路由】
      next('/login?redirect='+toPath);
    }else{
       //去的不是上面这些路由（home|search|shopCart）---放行
       next();
    }
  
 }
})

export default router